//package com.ruoyi.web.restApi;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.ruoyi.common.core.controller.BaseController;
//import com.ruoyi.common.core.domain.AjaxResult;
//import com.ruoyi.common.enums.TaskStatus;
//import com.ruoyi.common.utils.Threads;
//import com.ruoyi.common.utils.http.HttpUtils;
//import com.ruoyi.web.domain.AgvStatusEntity;
//import com.ruoyi.web.taskManagement.domain.TopCentralControllerOutTask;
//import com.ruoyi.web.taskManagement.service.impl.TopCentralControllerOutTaskServiceImpl;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.web.bind.annotation.*;
//
//import java.util.Arrays;
//import java.util.List;
//import java.util.stream.Collectors;
//
///**
// * 调度系统RestController
// *
// * @author Gua
// * @version 1.0
// * @date 2022-02-22
// */
//@RestController
//@RequestMapping("/dispatch")
//public class DispatchController extends BaseController {
//    @Autowired
//    private TopCentralControllerOutTaskServiceImpl taskService;
//
//    //提供任务上报接口
//
//
//    @Value("${custom.dispatch.taskUrl}")
//    private String taskUrl;
//    @Value("${custom.dispatch.errorUrl}")
//    private String errorUrl;
//    @Value("${custom.dispatch.agvUrl}")
//    private String agvUrl;
//
//    /**
//     * GET请求调度系统的任务接口
//     *
//     * @param agvNo agv代号
//     * @return 任务列表
//     */
//    @GetMapping("/task/get")
//    public List<TopCentralControllerOutTask> getTaskList(Integer agvNo) {
//        String params = "agvNo=" + agvNo;
//        String res = HttpUtils.sendGet(taskUrl, params);
//        try
//        {
//            JSONObject json = JSON.parseObject(res);
//            if (json.containsKey("code"))
//            {
//                String code = json.getString("code");
//                if (code.equals("0"))
//                {
//                    JSONArray array = JSON.parseArray(json.get("data").toString());
//                    List<TopCentralControllerOutTask> outTaskList = taskService.jsonToList(array);
//                    outTaskList.forEach(model -> logger.info(model.toString()));
//                    return outTaskList;
//                }
//            }
//            logger.info(String.format("返回数据有误：%s", res));
//        } catch (Exception e)
//        {
//            logger.error("接受数据转换为json时发生错误", e);
//        }
//        return null;
//    }
//
//    /**
//     * POST请求调度系统的任务接口
//     *
//     * @param outTask 任务实体
//     * @return 任务列表
//     */
//    @GetMapping("/task/post")
//    public Boolean createTask(TopCentralControllerOutTask outTask) {
//        String res = HttpUtils.sendPost(taskUrl, outTask.toJson());
//        try
//        {
//            JSONObject json = JSON.parseObject(res);
//            if (json.containsKey("code"))
//            {
//                String code = json.getString("code");
//                if (code.equals("0"))
//                {
//                    logger.info(String.format("返回数据：%s", res));
//                    return true;
//                }
//            }
//            logger.info(String.format("返回数据有误：%s", res));
//        } catch (Exception e)
//        {
//            logger.error("接受数据转换为json时发生错误", e);
//        }
//        return false;
//    }
//
//    /**
//     * PUT请求调度系统的任务接口
//     *
//     * @param outTask 任务实体
//     * @return 任务列表
//     */
//    @GetMapping("/task/put")
//    public Boolean updateTask(TopCentralControllerOutTask outTask) {
//        String res = HttpUtils.sendPut(taskUrl, outTask.toJson());
//        try
//        {
//            JSONObject json = JSON.parseObject(res);
//            if (json.containsKey("code"))
//            {
//                String code = json.getString("code");
//                if (code.equals("0"))
//                {
//                    logger.info(String.format("返回数据：%s", res));
//                    return true;
//                }
//            }
//            logger.info(String.format("返回数据有误：%s", res));
//        } catch (Exception e)
//        {
//            logger.error("接受数据转换为json时发生错误", e);
//        }
//        return false;
//    }
//
//    /**
//     * GET请求调度系统的故障信息接口
//     *
//     * @param nodeId 通信节点编号
//     * @return 报警编号
//     */
//    @GetMapping("/error")
//    public Integer getErrorNo(Integer nodeId) {
//        String params = "nodeId=" + nodeId;
//        String res = HttpUtils.sendGet(errorUrl, params);
//        try
//        {
//            JSONObject json = JSON.parseObject(res);
//            if (json.containsKey("code"))
//            {
//                String code = json.getString("code");
//                if (code.equals("0"))
//                {
//                    Integer alarmNo = Integer.parseInt(json.getString("data"));
//                    logger.info(String.format("获取报警编号：%d", alarmNo));
//                    return alarmNo;
//                }
//            }
//            logger.info(String.format("返回数据有误：%s", res));
//        } catch (Exception e)
//        {
//            logger.error("接受数据转换为json时发生错误", e);
//        }
//        return null;
//    }
//
//    /**
//     * GET请求调度系统的Agv状态信息接口
//     *
//     * @param agvNoList agv编号列表
//     * @return agv状态列表
//     */
//    @GetMapping("/agv/get")
//    public List<AgvStatusEntity> getAgvStatusList(List<Integer> agvNoList) {
//        String idsStr = agvNoList.stream().map(Object::toString).collect(Collectors.joining(","));
//        String params = "agvNos=" + idsStr;
//        String res = HttpUtils.sendGet(errorUrl, params);
//        try
//        {
//            JSONObject json = JSON.parseObject(res);
//            if (json.containsKey("code"))
//            {
//                String code = json.getString("code");
//                if (code.equals("0"))
//                {
//                    JSONArray array = JSON.parseArray(json.get("data").toString());
//                    List<TopCentralControllerOutTask> outTaskList = taskService.jsonToList(array);
//                    outTaskList.forEach(model -> logger.info(model.toString()));
//
//                    //TODO:agv状态信息怎么获取
//                    return null;
//                }
//            }
//            logger.info(String.format("返回数据有误：%s", res));
//        } catch (Exception e)
//        {
//            logger.error("接受数据转换为json时发生错误", e);
//        }
//        return null;
//    }
//
//
//    /**
//     * 模拟调度系统任务接口
//     *
//     * @return 任务信息
//     */
//    @GetMapping("/task")
//    public AjaxResult taskGet(@RequestParam Integer agvNo) {
//        if (agvNo == null || agvNo.equals(0))
//        {
//            Threads.service(1);
//        }
//        else
//        {
//            Threads.service(3);
//        }
//        JSONArray array = new JSONArray();
//
//        JSONObject data = new JSONObject();
//        data.put("agvNo", agvNo);
//        JSONObject taskInfo = new JSONObject();
//        taskInfo.put("taskId", 1);
//        taskInfo.put("taskCode", 1);
//        taskInfo.put("startLocation", 5);
//        taskInfo.put("goalLocation", 16);
//        taskInfo.put("taskStatus", TaskStatus.EXECUTING.getValue());
//        data.put("taskInfo", taskInfo);
//
//        array.add(data);
//
//        return AjaxResult.success(array);
//    }
//
//    @PostMapping("/task")
//    public AjaxResult taskPost(@RequestBody TopCentralControllerOutTask outTask) {
//        Threads.service(1);
//
//        return AjaxResult.success();
//    }
//
//    @PutMapping("/task")
//    public AjaxResult taskPut(@RequestBody TopCentralControllerOutTask outTask) {
//        Threads.service(1);
//
//        return AjaxResult.success();
//    }
//
//    /**
//     * 模拟调度系统AGV状态信息接口
//     *
//     * @return AGV状态信息
//     */
//    @GetMapping("/agv")
//    public AjaxResult agvGet(@RequestParam String agvNos) {
//        JSONArray array = new JSONArray();
//        for (Integer agvNo : Arrays.stream(agvNos.split(",")).map(Integer::parseInt).collect(Collectors.toList()))
//        {
//            JSONObject data = new JSONObject();
//            data.put("agvNo", agvNo);
//            JSONObject status = new JSONObject();
//            status.put("onlineStatus", 1);
//            status.put("location", 12);
//            status.put("hasTask", 0);
//            data.put("status", status);
//
//            array.add(data);
//        }
//
//        return AjaxResult.success(array);
//    }
//}
